home *** CD-ROM | disk | FTP | other *** search
- static char ost_prg[] = "@(#)char *ostern_s(int jjjj)";
- static char ost_ver[] = "@(#)v1.00/kr+K.Rupp ; 10.08.91";
- /* ostern_s basiert auf der Funktion long ostern(int jjjj) aus der
- Sammlung C-Funktionen I v2.0 von K.Rupp.
- Es wird das Osterdatum im Jahr jjjj ermittelt.
- Es wird ein String im Format "tt.mm.jjjj" zurückgegeben,
- der z.B. mit der Funktion cnvtdate() in ein anderes Format
- konvertiert werden kann. Der String gibt das Datum für
- den Ostersonntag aus.
- Die Funktion arbeitet z.Z. im Zeitraum 1700 - 2199 und gibt
- einen NULL-Zeiger zurück, falls das Jahr außerhalb liegt.
- */
-
- #include <stdio.h>
- #include <stdlib.h>
-
- char *ostern_s(int jjjj)
- {
- char datum[11];
- int a, b, c, d, e, N, tt, mm;
- int M = 23;
-
- datum[0] = '\0';
-
- switch(jjjj/100)
- {
- case 17: /* 1700 bis 1799 */
- N = 3;
- break;
- case 18: /* 1800 bis 1899 */
- N = 4;
- break;
- case 19: /* 1900 .. */
- case 20: /* .. bis 2099 */
- M++;
- N = 5;
- break;
- case 21: /* 2100 bis 2199 */
- M++;
- N = 6;
- break;
- default:
- return(NULL);
- } /* ENDE: switch(jjjj/100) */
-
- a = jjjj % 19;
- b = jjjj % 4;
- c = jjjj % 7;
- d = (19*a + M) % 30;
- e = (2*b + 4*c + 6*d + N) % 7;
-
- tt = 22 + d + e;
- mm = 3; /* März */
- if (tt < 22 || tt > 31) {
- tt = d + e - 9;
- mm++; /* April */
- }
-
- if (mm == 4) { /* wenn April */
- if (tt == 26)
- tt = 19;
- if (tt == 25 && d == 28 && a > 10)
- tt = 18;
- }
-
- /* Umwandlung in String :
- */
- sprintf(datum,"%2.2d.%2.2d.%4.4d",tt,mm,jjjj);
- datum[10] = '\0';
-
- return(datum);
-
- } /* ENDE: ostern_s() */
-
-